package com.example.hotelback.config;

import cn.hutool.core.util.StrUtil;
import com.example.hotelback.exception.CustomException;
import com.example.hotelback.utils.JwtUtils;
import io.jsonwebtoken.Claims;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

public class JwtInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1. 从http请求的header中获取token
        String token = request.getHeader("token");
        if (StrUtil.isBlank(token)) { // 如果token是null
            // 如果没拿到，再去参数里面拿
            token = request.getParameter("token");
            if (StrUtil.isBlank(token)) { // 如果token还是null
                throw new CustomException("还未登录，请先登录");
            }
        }
        // 2. 开始执行认证
//        if (StrUtil.isBlank(token)) { // 如果token还是null
//            throw new CustomException("还未登录，请先登录");
//        }
        Claims claims = JwtUtils.getClaimsByToken(token);
        Date expiration = claims.getExpiration();
        if(expiration != null && expiration.before(new Date())) {
            throw new CustomException("Token已过期，请重新登录");
        }
        return true; // 返回 true：表示拦截器链执行完毕，请求可以继续向后执行；允许请求继续执行到目标方法（Controller 方法）或者其他拦截器
    }
}
